package com.example.cmh.mapper;

import com.example.cmh.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户数据访问接口
 */
@Mapper
public interface UserMapper {
    
    /**
     * 分页条件搜索用户信息
     * @param offset 偏移量
     * @param size 每页大小
     * @param userName 用户名
     * @param userPhone 用户电话
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param userStatus 用户状态
     * @return 用户列表
     */
    List<User> getUsers(Integer offset, Integer size, String userName, String userPhone, String startTime, String endTime, String userStatus);
    
    /**
     * 获取符合条件的用户总数
     * @param userName 用户名
     * @param userPhone 用户电话
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param userStatus 用户状态
     * @return 总数
     */
    Integer getUsersCount(String userName, String userPhone, String startTime, String endTime, String userStatus);
    
    /**
     * 根据userId搜索用户信息
     * @param offset 偏移量
     * @param size 每页大小
     * @param userId 用户ID
     * @return 用户列表
     */
    List<User> getUsersByUserId(Integer offset, Integer size, Integer userId);
    
    /**
     * 根据userId获取用户总数
     * @param userId 用户ID
     * @return 总数
     */
    Integer getUsersByUserIdCount(Integer userId);
    
    /**
     * 根据部门搜索用户信息
     * @param offset 偏移量
     * @param size 每页大小
     * @param departmentId 部门ID
     * @return 用户列表
     */
    List<User> getUsersByDepartmentId(Integer offset, Integer size, Integer departmentId);
    
    /**
     * 根据部门获取用户总数
     * @param departmentId 部门ID
     * @return 总数
     */
    Integer getUsersByDepartmentIdCount(Integer departmentId);
    
    /**
     * 新增用户
     * @param user 用户信息
     */
    void addUsers(User user);
    
    /**
     * 更新用户信息
     * @param user 用户信息
     */
    void updateUser(User user);
    
    /**
     * 删除用户
     * @param userId 用户ID
     */
    void deleteUser(Integer userId);
    
    /**
     * 用户登录
     * @param userName 用户名
     * @param password 密码
     * @return 用户信息
     */
    User login(String userName, String password);
    
    /**
     * 更新用户token
     * @param userId 用户ID
     * @param token 令牌
     */
    void updateUserToken(Integer userId, String token);
    
    /**
     * 根据多个部门ID分页查询用户信息
     * @param offset 偏移量
     * @param size 每页大小
     * @param departmentIds 部门ID集合
     * @return 用户列表
     */
    java.util.List<User> getUsersByDepartmentIds(@org.apache.ibatis.annotations.Param("offset") Integer offset,
                                                 @org.apache.ibatis.annotations.Param("size") Integer size,
                                                 @org.apache.ibatis.annotations.Param("departmentIds") java.util.List<Integer> departmentIds);

    /**
     * 根据多个部门ID统计用户总数
     * @param departmentIds 部门ID集合
     * @return 总数
     */
    Integer getUsersByDepartmentIdsCount(@org.apache.ibatis.annotations.Param("departmentIds") java.util.List<Integer> departmentIds);

    /**
     * 根据用户名获取用户
     */
    User getUserByName(@Param("userName") String userName);
} 